package com.study.design.model.createPattern.singleton;

/**
* @Name: Singleton03
* @Description: 单例模式实现三：双重检测锁
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-2-9 下午7:37:12 
* @Version: V1.0
 */
public class Singleton03 {
	
	//声明实例化对象，类初始化时不创建
	private static Singleton03 instance = null ;
	//构造方法私有化
	private Singleton03() {}
	/**
	* @Name: getInstance
	* @Description: 创建并获取实例化对象
	* 特点：
	* 	将同步内容下方到方法内部，不必每次获取对象时都进行同步操作，只有第一次获取时才进行同步操作，提高了执行效率
	* 问题：
	* 	由于编译器优化原因和底层内部模型原因，偶尔会出现问题，不建议使用。
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-2-9 下午7:41:17
	* @Parameters: @return
	* @Return: Singleton03
	 */
	public static Singleton03 getInstance() {
		if(instance == null) {
			Singleton03 s ; 
			synchronized (Singleton03.class) {
				s = instance ;
				if(s == null) {
					synchronized (Singleton03.class) {
						if(s == null) {
							s = new Singleton03() ;
						}
					}
					instance = s ;
				}
			}
		}
		return instance ;
	}

}
